{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[ 1.  2.  3.  4.  5.  6.]\n",
      "  [ 7.  8.  9. 10. 11. 12.]\n",
      "  [13. 14. 15. 16. 17. 18.]\n",
      "  [19. 20. 21. 22. 23. 24.]]\n",
      "\n",
      " [[25. 26. 27. 28. 29. 30.]\n",
      "  [31. 32. 33. 34. 35. 36.]\n",
      "  [37. 38. 39. 40. 41. 42.]\n",
      "  [43. 44. 45. 46. 47. 48.]]\n",
      "\n",
      " [[49. 50. 51. 52. 53. 54.]\n",
      "  [55. 56. 57. 58. 59. 60.]\n",
      "  [61. 62. 63. 64. 65. 66.]\n",
      "  [67. 68. 69. 70. 71. 72.]]]\n"
     ]
    }
   ],
   "source": [
    "a = np.linspace(1, 72, 72)\n",
    "A = np.array(a).reshape((3, 4, 6))\n",
    "print(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "40.0"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[1, 2, 3] #  即 A[1][2][3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[32., 33., 34.],\n",
       "        [38., 39., 40.]],\n",
       "\n",
       "       [[56., 57., 58.],\n",
       "        [62., 63., 64.]]])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[1:3, 1:3, 1:4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 8.,  9., 10.],\n",
       "        [14., 15., 16.]],\n",
       "\n",
       "       [[32., 33., 34.],\n",
       "        [38., 39., 40.]],\n",
       "\n",
       "       [[56., 57., 58.],\n",
       "        [62., 63., 64.]]])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[:, 1:3, 1:4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 5.,  6.],\n",
       "        [11., 12.],\n",
       "        [17., 18.],\n",
       "        [23., 24.]],\n",
       "\n",
       "       [[29., 30.],\n",
       "        [35., 36.],\n",
       "        [41., 42.],\n",
       "        [47., 48.]],\n",
       "\n",
       "       [[53., 54.],\n",
       "        [59., 60.],\n",
       "        [65., 66.],\n",
       "        [71., 72.]]])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[:, :, 4:6]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 6., 12., 18., 24.],\n",
       "       [30., 36., 42., 48.],\n",
       "       [54., 60., 66., 72.]])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[:, :, 5] # 只取最后一列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 6., 12., 18., 24.],\n",
       "       [30., 36., 42., 48.],\n",
       "       [54., 60., 66., 72.]])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[...,5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[49., 50., 51., 52., 53., 54.],\n",
       "       [55., 56., 57., 58., 59., 60.],\n",
       "       [61., 62., 63., 64., 65., 66.],\n",
       "       [67., 68., 69., 70., 71., 72.]])"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[-1,]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[25., 26., 27., 28., 29., 30.],\n",
       "       [31., 32., 33., 34., 35., 36.],\n",
       "       [37., 38., 39., 40., 41., 42.],\n",
       "       [43., 44., 45., 46., 47., 48.]])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[1, :, :] # 只取第一行"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 正数数组索引：指定获取数组中某一位置的元素"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[25., 26., 27., 28., 29., 30.],\n",
       "        [31., 32., 33., 34., 35., 36.],\n",
       "        [37., 38., 39., 40., 41., 42.],\n",
       "        [43., 44., 45., 46., 47., 48.]]])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[1:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[25., 26., 27., 28., 29., 30.],\n",
       "        [43., 44., 45., 46., 47., 48.]]])"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[1:2, [0, 3]] # 从 A[1, 2] 中取出第 0 行 和第 3 行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[27., 47.]])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[1:2, [0, 3], [2, 4]] # 从 A[1, 2] 中取（0，2）（3，4）位置处的元素"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([27., 71.])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[[1, 2],[0, 3],[2, 4]] # 从 A 中取（1，0，2）（2，3，4）位置处的元素"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 布尔索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 1.,  2.,  3.,  4.,  5.,  6.],\n",
       "        [ 7.,  8.,  9., 10., 11., 12.],\n",
       "        [13., 14., 15., 16., 17., 18.],\n",
       "        [19., 20., 21., 22., 23., 24.]],\n",
       "\n",
       "       [[25., 26., 27., 28., 29., 30.],\n",
       "        [31., 32., 33., 34., 35., 36.],\n",
       "        [37., 38., 39., 40., 41., 42.],\n",
       "        [43., 44., 45., 46., 47., 48.]],\n",
       "\n",
       "       [[49., 50., 51., 52., 53., 54.],\n",
       "        [55., 56., 57., 58., 59., 60.],\n",
       "        [61., 62., 63., 64., 65., 66.],\n",
       "        [67., 68., 69., 70., 71., 72.]]])"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 3.,  6.,  9., 12., 15., 18., 21., 24., 27., 30., 33., 36., 39.,\n",
       "       42., 45., 48., 51., 54., 57., 60., 63., 66., 69., 72.])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[A % 3 == 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([31., 32., 33., 34., 35., 36., 37., 38., 39., 40., 41., 42., 43.,\n",
       "       44., 45., 46., 47., 48., 49., 50., 51., 52., 53., 54., 55., 56.,\n",
       "       57., 58., 59., 60., 61., 62., 63., 64., 65., 66., 67., 68., 69.,\n",
       "       70., 71., 72.])"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[A > 30] # 大于 30 的元素"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([31., 32., 33., 34., 35., 36., 37., 38., 39., 40., 41., 42., 43.,\n",
       "       44., 45., 46., 47., 48., 49.])"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[A > 30][A[A > 30] < 50] # 大于 30 小于 50 的元素"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 保留满足指定条件的行\n",
    "https://www.cnblogs.com/qiu-hua/p/7808896.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.,  2.,  3.,  4.,  5.,  6.],\n",
       "       [31., 32., 33., 34., 35., 36.],\n",
       "       [61., 62., 63., 64., 65., 66.]])"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[A[:, :, 4] % 5 == 0,:] # 保留第四列（从零开始数）能被 5 整处的行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 7.,  8.,  9., 10., 11., 12.],\n",
       "       [13., 14., 15., 16., 17., 18.],\n",
       "       [19., 20., 21., 22., 23., 24.],\n",
       "       [25., 26., 27., 28., 29., 30.],\n",
       "       [37., 38., 39., 40., 41., 42.],\n",
       "       [43., 44., 45., 46., 47., 48.],\n",
       "       [49., 50., 51., 52., 53., 54.],\n",
       "       [55., 56., 57., 58., 59., 60.],\n",
       "       [67., 68., 69., 70., 71., 72.]])"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ~ 取补运算符\n",
    "A[~(A[:, :, 4] % 5 == 0),:] # 保留第四列（从零开始数）不能被 5 整处的行"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 花式索引, 跟上面的正数索引差不多"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 1.,  2.,  3.,  4.,  5.,  6.],\n",
       "        [ 7.,  8.,  9., 10., 11., 12.],\n",
       "        [13., 14., 15., 16., 17., 18.],\n",
       "        [19., 20., 21., 22., 23., 24.]],\n",
       "\n",
       "       [[49., 50., 51., 52., 53., 54.],\n",
       "        [55., 56., 57., 58., 59., 60.],\n",
       "        [61., 62., 63., 64., 65., 66.],\n",
       "        [67., 68., 69., 70., 71., 72.]]])"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[[0, 2]] # 第 0 行 和 第 2 行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([13., 14., 15., 16., 17., 18.])"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[0, 2] # 第 （0,2）位置\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
